
#ifdef DATASELECTION_EXPORTS
#define DATASELECTION_API __declspec(dllexport)
#else
#define DATASELECTION_API __declspec(dllimport)
#endif

#define DATA_SELECTION 0
#define FILE_SELECTION 1

 extern "C" {
	 DATASELECTION_API void SetLogger(void * logger);
	 
   // Initialization routine
	 // Receives the window title of the main window
	 DATASELECTION_API void Init(const char * windowTitle,
                                  unsigned int time_before_paste, 
                                  unsigned int time_after_paste, 
                                  unsigned int time_between_keystrokes);


	 // Cleanup routine, free some resources.
	 DATASELECTION_API void Cleanup();

	 // Function in charge of retrieving the selected stuff by the user.
	 // It receives four parameters:

	 //  @param buff         It will hold the selected stuff, it can be text or path of selected directories/files
	 //                      on a windows explorer or desktop.
	 //  @param buffLen      Space available on the buff argument.
	 //  @param usePlainText If the selection is not an explorer, then it's text. If the parameter is 1, we retrive 
     //                      the selection in RF_TEXT
	 //  @returns            Acording to the user last click before our window (which is the real last click),
	 //                      the result can be: RESULT_TYPE_SELECTED_TEXT or RESULT_TYPE_FILES.
	 DATASELECTION_API int GetSelection(char*& buff, int& buffLen, int usePlainText);


	 // Function in charge of putting the encrypted/decrypted text back to the window it was copied from.
	 DATASELECTION_API int ReplaceSelection(const char* buff, int usePlainText, int openEditor, int dontCheckResult);

	 DATASELECTION_API void FreeSelectionBuffer(char* buffer);
 }